package io.github.biezhi.elves.service;

import java.util.List;
import com.github.pagehelper.Page;
import org.apache.ibatis.annotations.Param;
import io.github.biezhi.elves.model.LegalInfo;
import io.github.biezhi.elves.model.EbaseInfo;
import io.github.biezhi.elves.model.RefereeDoc;
import io.github.biezhi.elves.model.ChangeInfo;
import io.github.biezhi.elves.model.Shareholder;
import io.github.biezhi.elves.model.NoticeCourt;
import io.github.biezhi.elves.model.ExecutorInfo;
import io.github.biezhi.elves.model.LegalInfoHis;
import io.github.biezhi.elves.model.BulletinCourt;
import io.github.biezhi.elves.model.MainPersonnel;
import io.github.biezhi.elves.model.StockStructureInfo;
import io.github.biezhi.elves.model.RelationProfileInfo;
import io.github.biezhi.elves.model.EnterpriseProfileInfo;
import io.github.biezhi.elves.model.FamilyInvestmentInfo;
import io.github.biezhi.elves.model.StockStructureProfileInfo;

/**
 * 股东数据接口
 *
 */
public interface ShareholderService {
	/*******************************查询股东数据 开始*********************************************************/
	/**
	 * 查询还没爬取企业列表数据
	 * @return
	 */
	public int countCrawlTableDataForNotLoad();
	
	/**
	 * 分页查询爬取列表数据
	 * @param pageNo		参数说明:页号
     * @param pageSize		参数说明:每页显示记录数
	 * @return
	 */
	public Page<String> queryCrawlTableDataPage(int pageNo, int pageSize);
	
	/**
	 * 分页查询根据地市ID爬取列表数据
	 * @param pageNo		参数说明:页号
     * @param pageSize		参数说明:每页显示记录数
     * @param cityId			参数说明:地市ID
	 * @return
	 */
	public Page<String> queryCrawlTableDataPageByCityId(int pageNo, int pageSize, String cityId);
	
	/**
	 * 分页查询全部或者根据地市ID爬取列表数据
	 * @param pageNo		参数说明:页号
     * @param pageSize		参数说明:每页显示记录数
     * @param cityId			参数说明:地市ID
	 * @return
	 */
	public Page<String> queryAllOrByCityIdCrawlTableDataPage(int pageNo, int pageSize, String cityId);
	
	/**
	 * 根据企业名称查询企业基础表数据
	 * @param entname
	 * @return
	 */
	public List<EbaseInfo> queryEbaseInfoByEntname(String entname);
	
	/**
	 * 查询企业基础表空数据
	 * @param pageNo		参数说明:页号
     * @param pageSize		参数说明:每页显示记录数
	 * @return
	 */
	public Page<EbaseInfo> queryEbaseInfoEntnameIsNull(int pageNo, int pageSize);
	
	/**
	 * 统计企业基础表空数据数量
	 * @return
	 */
	public int countEbaseInfoEntnameIsNull();
	
	/**
	 * 根据企业名称查询法人代表信息表unique_id字段
	 * @param uniqueId
	 * @return
	 */
	public LegalInfo queryEntnameByUnique(String uniqueId);
	
	/**
	 * 统计去重企业名称法人代表信息表数据量
	 * @return
	 */
	public int countAppLegalInfoForDistinctEntname();
	
	/**
	 * 获取要爬取企业列表数量
	 * @return
	 */
	public int getPaiquNumber();
	
	/**
	 * 获取要工商列表数据(分页)
	 * @param pageNo		参数说明:页号
     * @param pageSize		参数说明:每页显示记录数
	 * @return
	 */
	public List<EbaseInfo> queryEbaseInfoForCityIdPage(int pageNo, int pageSize);
	
	/**
	 * 查询爬取数据列表中没有更新的地市id数据统计数
	 * @param cityId
	 * @return
	 */
	public int countCrawlTableDataByCityId(String cityId);
	
	/**
	 * 将uuid作为入参，查询企业图谱表数据keyno值，是否已存在数据库中
	 * @param uuid
	 * @return
	 */
	public int countEnterpriseKeyNoByUuid(String uuid);
	
	/**
	 * 根据地市ID查询法人代表数据(分页)
	 * @param pageNo
	 * @param pageSize
	 * @param cityId
	 * @return
	 */
	public List<LegalInfo> getLegalInfoPageByCityId(int pageNo, int pageSize, String cityId);
	
	/**
	 * 查询企业图谱表总数
	 * 
	 * @param cityId
	 * @return
	 */
	public int countEnterpriseProfileInfo(String cityId);
	
	/**
	 * 将uuid作为入参，查询投资族谱表数据keyno值，是否已存在数据库中
	 * @param uuid
	 * @return
	 */
	public int countFamilyInvestmentKeyNoByUuid(String uuid);
	
	/**
	 * 查询投资族谱表总数
	 * 
	 * @param cityId
	 * @return
	 */
	public int countFamilyInvestmentInfo(String cityId);
	/*******************************查询股东数据 结束*********************************************************/
	
	/*******************************新增股东数据 开始*********************************************************/
	/**
	 * 保存法人代表数据
	 * @param legalInfo
	 */
	public void saveLegalInfo(LegalInfo legalInfo) throws Exception;
	
	/**
	 * 批量保存法人代表数据空数据(来源于数据库e_baseinfo)
	 * @param ebaseInfo
	 */
	public void batchSaveLegalInfoIsNull(List<EbaseInfo> ebaseInfo) throws Exception;
	
	/**
	 * 保存股东数据
	 * @param shareholder
	 */
	public void saveShareholder(Shareholder shareholder) throws Exception;
	
	/**
	 * 保存股权结构
	 * @param stockStructureInfo
	 */
	public void saveStockStructure(StockStructureInfo stockStructureInfo) throws Exception;
	
	/**
	 * 保存主要人员
	 * @param mainPersonnel
	 */
	public void saveMainPersonnel(MainPersonnel mainPersonnel) throws Exception;
	
	/**
	 * 保存历史法定代表人
	 * @param legalInfoHis
	 */
	public void saveLegalInfoHis(LegalInfoHis legalInfoHis) throws Exception;
	
	/**
	 * 保存董事长或执行董事成员
	 * @param changeInfo
	 */
	public void saveChairmanChanage(ChangeInfo changeInfo) throws Exception;
	
	/**
	 * 保存高管人员
	 * @param changeInfo
	 */
	public void saveExecutivePersonnel(ChangeInfo changeInfo) throws Exception;
	
	/**
	 * 保存监事数据
	 * @param changeInfo
	 */
	public void saveSupervisor(ChangeInfo changeInfo) throws Exception;
	
	/**
	 * 保存名称变更
	 * @param changeInfo
	 */
	public void saveNameChange(ChangeInfo changeInfo) throws Exception;
	
	/**
	 * 保存法定代表人（负责人）
	 * @param changeInfo
	 */
	public void saveLegalChange(ChangeInfo changeInfo) throws Exception;
	
	/**
	 * 保存董事成员
	 * @param changeInfo
	 */
	public void saveChairmanMemberChange(ChangeInfo changeInfo) throws Exception;
	
	/**
	  * 法律诉讼信息
	  * 
	  * 保存被执行人数据
	  * @param executorInfo
	  */
	public void saveExecutorInfo(ExecutorInfo executorInfo) throws Exception;
	
	/**
	  * 法律诉讼信息
	  * 
	  * 保存裁判文书数据
	  * @param refereeDoc
	  * @throws Exception
	  */
	 public void saveRefereeDoc(RefereeDoc refereeDoc) throws Exception;
	
	/**
	  * 法律诉讼信息
	  * 
	  * 保存法院公告数据
	  * @param noticeCourt
	  */
	 public void saveNoticeCourt(NoticeCourt noticeCourt) throws Exception;
	 /**
	  * 法律诉讼信息
	  * 
	  * 保存开庭公告数据
	  * @param bulletinCourt
	  */
	 public void saveBulletinCourt(BulletinCourt bulletinCourt) throws Exception;
	 
	 /**
	  * 创建企业数据备份表(表名+统计数)
	  * @param tableName
	  * @param count
	  * @throws Exception
	  */
	 public void createTableName(@Param("tableName") String tableName,@Param("count") int count) throws Exception;
	 
	 /**
	  * 保存企业图谱数据
	  * @param enterpriseProfileInfo
	  * @throws Exception
	  */
	 public void saveEnterpriseProfileInfo(EnterpriseProfileInfo enterpriseProfileInfo) throws Exception;
	 
	 /**
	  * 保存投资族谱数据
	  * @param familyInvestmentInfo
	  * @throws Exception
	  */
	 public void saveFamilyInvestmentInfo(FamilyInvestmentInfo familyInvestmentInfo) throws Exception;
	 
	 /**
	  * 保存关联图谱数据
	  * @param relationProfileInfo
	  * @throws Exception
	  */
	 public void saveRelationProfileInfo(RelationProfileInfo relationProfileInfo) throws Exception;
	 
	 /**
	  * 保存股权结构图数据
	  * @param stockStructureProfileInfo
	  * @throws Exception
	  */
	 public void saveStockStructureProfileInfo(StockStructureProfileInfo stockStructureProfileInfo) throws Exception;
	/*******************************新增股东数据 结束*********************************************************/
	
	/*******************************修改股东数据 结束*********************************************************/
	 /**
	  * 根据企业名称更新爬取列表数据表
	  * @param entname
	  */
	public void updateCrawlTableData(String entname) throws Exception;

	/**
	  * 根据企业名称批量更新爬取列表数据表设置is_load字段为T(意指在企查查网站搜索到数据并入库)
	  * @param list
	  */
	 public void batchUpdateCrawlTableDataForIsLoad(List<EbaseInfo> ebaseInfo) throws Exception;
	
	 /**
	  * 根据企业名称更新爬取列表数据表设置is_null字段为T(意指在企查查网站没有搜索到)
	  * @param entname
	  */
	public void updateCrawlTableDataForIsNull(String entname) throws Exception;
	
	/**
	  * 根据企业名称更新爬取列表数据表设置法律诉讼字段为数值(意指在企查查某企业是否存在法律诉讼)
	  * @param susongCount
	  * @param entname
	  */
	 public void updateCrawlTableDataForSusongCount(String susongCount,String entname) throws Exception;
	 
	 /**
	  * 根据企业名称批量更新爬取列表数据表地市id和地市名称
	  * @param list
	  */
	 public void batchUpdateCrawlTableDataForCityIdAndCityName(List<EbaseInfo> list) throws Exception;
	/*******************************修改股东数据 结束*********************************************************/
	
	 /*******************************删除股东数据 结束*********************************************************/
	 /*******************************删除股东数据 结束*********************************************************/
}